package com.empresa.iflex.core;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

import com.empresa.iflex.R;

public class Add extends Activity{
	

	private EditText eKm, eAbast, ePreco;	// Variaveis para a adicao de dados ao banco
	private Spinner spAbast, spComb, spConsumo;	// Spinners utilizados na adicao de dados ao banco
	private int cheio;	//Boolean para o abastecimento do tanque (1 = cheio / 0 = parcial)
	private float fKm = 0, fAbast = 0, fPreco = 0, fLitros = 0;
	private String sComb, sPercurso;
	
	/* Chamada quando o botão Menu é apertado */
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {    	
    	MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
        return true;
    }
    
    
    /* Chamad quando uma opção do Menu é selecionada */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
      // Captura o menu selecionado
       switch (item.getItemId()) {
          case R.id.about:
             mAbout();
             return true;
          case R.id.sair:
             finish();
             return true;
          default:
             return super.onOptionsItemSelected(item);
       }
    }
    
    
    /* Opção "About" do Menu */
    private void mAbout(){  
    	Context mContext = getApplicationContext();
    	LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
    	View layoutmenu = inflater.inflate(R.layout.about,
                (ViewGroup) findViewById(R.id.layoutmenu));

    	AlertDialog.Builder builder = new AlertDialog.Builder(this);  
    	builder.setIcon(R.drawable.f);
    	builder.setTitle("iFlex");
	    builder.setView(layoutmenu)
	    	.setCancelable(false)
	    	.setPositiveButton("Ok", new DialogInterface.OnClickListener(){ 
	    		public void onClick(DialogInterface dialog, int id){  
	    			dialog.cancel();
	    	    }  
	    }); 
    	AlertDialog alert = builder.create();  
    	alert.show(); 
    	
    }
    
    
	/* Chamada quando o programa eh inicializado */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        CarregaTelaInicial();
        
        Bundle b = getIntent().getExtras();
    	if (b!= null){
    		this.fKm = b.getFloat("distancia");
    		this.fAbast = b.getFloat("consumo");
    		//Log.w("VALORES: ", Float.toString(fKm)+"  "+Float.toString(fAbast));
    		eKm.setText(Float.toString(fKm));
            eAbast.setText(Float.toString(fAbast));
            ePreco.requestFocus();
    	}               
    }
       
    
    /* Chamada para a apresentacao dos spinners da funcao adicionar dados */
    public void CarregaTelaInicial(){
    	
    	setContentView(R.layout.add);
    	findViewById(R.id.bAdd).setOnClickListener(mOk);
    	
        eKm = (EditText) findViewById(R.id.eKm);
        eAbast = (EditText) findViewById(R.id.eAbast);
        ePreco = (EditText) findViewById(R.id.ePreco);
        
    	/* Spinner de selecao entre Litros e R$ */
        spAbast = (Spinner) findViewById(R.id.spAbast);
        ArrayAdapter adapter1 = ArrayAdapter.createFromResource(this, R.array.aLt_rs, android.R.layout.simple_spinner_item);
        adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spAbast.setAdapter(adapter1);
        
        /* Spinner de selecao entre Etanol e gasolina */
        spComb = (Spinner) findViewById(R.id.spComb);
        ArrayAdapter adapter2 = ArrayAdapter.createFromResource(this, R.array.aEta_gas, android.R.layout.simple_spinner_item);
        adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spComb.setAdapter(adapter2);
        
        /* Spinner de selecao entre o tipo de consumo recente */
        spConsumo = (Spinner) findViewById(R.id.spConsumo);
        ArrayAdapter adapter3 = ArrayAdapter.createFromResource(this, R.array.aConsumo, android.R.layout.simple_spinner_item);
        adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spConsumo.setAdapter(adapter3);
    }
    
    
    /* Adiciona os dados inseridos ao banco */
    public final Button.OnClickListener mOk = new Button.OnClickListener() {
        public void onClick(View v) {
        	// TODO fechar sempre com idh.close() depois de usar	
        	
        	
        	/* Strings com os dados dos spinners */
        	String sAbast = spAbast.getSelectedItem().toString();	// Contem: "Litros" ou "R$"
        	sComb = spComb.getSelectedItem().toString();	// Contem: "Etanol" ou "Gasolina"
        	sPercurso = spConsumo.getSelectedItem().toString();	// Contem: "Cidade" ou "Cidade e Estrada" ou "Estrada"            
            
        	boolean campos_nulos = false;
			try {
				fKm = Float.parseFloat(eKm.getText().toString());
				fAbast = Float.parseFloat(eAbast.getText().toString());
				fPreco = Float.parseFloat(ePreco.getText().toString());
			} catch (NumberFormatException e) {
				// TODO Auto-generated catch block
				Toast.makeText(getApplicationContext(), "Digite os valores", Toast.LENGTH_SHORT).show();
				campos_nulos = true;
			}
			
			if (!campos_nulos){
	            if (sAbast.equals("Litros")) {
	            	fLitros = fAbast;
	            }else {
	            	fLitros = fAbast/fPreco;
	            }
	            
	            MensagemCheio();   
			}         
        }
    };
    
    
    private void Inserir(){ 
        Percurso p = new Percurso(getApplicationContext(), fKm, fLitros, fPreco, sComb, sPercurso, null, cheio);
        //Log.w("CHEIO? ", Integer.toString(cheio));
        try {
			p.insert();
			//p.unitTest01(getApplicationContext()); //executa unitTest, que gera 100 inserções no banco de dados
			Toast.makeText(getApplicationContext(), "Dados inseridos com sucesso.", Toast.LENGTH_SHORT).show();
            finish();
		} catch (Exception e) {
			e.printStackTrace();
			Toast.makeText(getApplicationContext(), "Falha ao inserir! Desculpe.", Toast.LENGTH_SHORT).show();
		}
    }
    
    private void MensagemCheio(){  
    	AlertDialog.Builder builder = new AlertDialog.Builder(this);  
    	builder.setIcon(R.drawable.f);
	    builder.setMessage("O tanque foi completamente abastecido?")
	    	.setCancelable(false)
	    	.setPositiveButton("Sim", new DialogInterface.OnClickListener(){ 
	    		public void onClick(DialogInterface dialog, int id){  
	    			cheio = 1;
	    			Inserir();
	    	    }  
	    });
	    builder.setNegativeButton("Não", new DialogInterface.OnClickListener(){  
  	          public void onClick(DialogInterface dialog, int id){  
  	               cheio = 0; 
  	               Inserir();
  	          }  
  	     }); 
    	AlertDialog alert = builder.create();  
    	alert.show();  
	} 

}
